<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 基本数据的拷贝
    // var a = 10;
    // var b = a;
    // console.log(a);
    // console.log(b);
    // b = 20;
    // console.log(a);
    // console.log(b);

    // ====

    // 浅拷贝
    // var obj1 = {name:"admin"}
    // var obj2 = obj1;
    // console.log(obj1)
    // console.log(obj2)
    // obj2.name = "root"
    // console.log(obj1)
    // console.log(obj2)

    // =====

    // 简单深拷贝：遍历

    // var obj1 = {name:"admin"}
    // var obj2 = {};
    // for(var i in obj1){
    //     obj2[i] = obj1[i];
    // }
    // console.log(obj1)
    // console.log(obj2)
    // obj2.name = "root";
    // console.log(obj1)
    // console.log(obj2)

    // =======

    // 多层复杂数据，进行深拷贝（有缺陷）

    // var obj1 = {
    //     obj2:{
    //         obj3:{
    //             name:"hello"
    //         }
    //     }
    // }

    // var foo = {};

    // for(var i in obj1){
    //     foo[i] = obj1[i];
    // }

    // console.log(obj1)
    // console.log(foo)
    // // foo.obj2 = "world";
    // foo.obj2.obj3.name = "world"
    // console.log(obj1)
    // console.log(foo)

    // ====

    // 递归思想，实现真正的深拷贝
    
    // var obj1 = {
    //     obj2:{
    //         obj3:{
    //             name:"hello"
    //         }
    //     }
    // }

    // var foo = {};
    // for(var i in obj1){
    //     foo[i] = {};
    //     for(var j in obj1[i]){
    //         foo[i][j] = {};
    //         for(var k in obj1[i][j]){
    //             foo[i][j][k] = obj1[i][j][k]
    //         }
    //     }
    // }

    // console.log(obj1)
    // console.log(foo)
    // foo.obj2.obj3.name = "hahaha"
    // console.log(obj1)
    // console.log(foo)


    // ========

    // 练习
    
    // var num = 10;
    // var obj = {age:10};

    // function change(num, obj){
    //     num--;
    //     obj.age--;
    // }
    // change(num, obj);

    // console.log(num);       // 10
    // console.log(obj.age);   // 9

    // 实参是一个对象
    // 形参 = 实参

    // var obj = {}
    // var obj2 = obj;
    

    // var num = 10;
    // var obj = {age:10};
    // function change(obj){
    //     num--;
    //     obj.age--;
    // }
    // change(obj);
    // console.log(num);       // 9
    // console.log(obj.age);   // 9

</script>
</html>